<?php
class Delivery_Model_DbTable_Opciones
	extends Delivery_Model_DbTable_Desactivable

{
	protected $_name = 'opciones';
	protected $_primary = 'idOpcion';
	
    public function insert( $opcion ){
		$data = $this->_fecha( $this->_getData( $opcion ), true, true );
		return parent::insert($data);
	}
		
	public function update( $opcion ){
		
		$data = $this->_fecha( $this->_getData( $opcion ), false, true);
		
     	return parent::update($data, array('idOpcion = ?' => $opcion->idOpcion));
	}
	
	public function delete( $opcion ){
		return parent::delete(
			array( 'idOpcion = ?' => $opcion->idOpcion)
		);
	}
	
	public function getById( $ididOpcion ){
		return 
			$this->_db->fetchRow(
				$this->select()->where('idOpcion = ?', $ididOpcion, Zend_Db::INT_TYPE)
			);
	}
	
	/**
	 * @param array $ids
	 * @return array:
	 */
	public function getByIds( $ids )
	{
		return $this->getAdapter()->fetchAll(
			$this->select()->where( 'idOpcion IN (?)', $ids, Zend_Db::INT_TYPE),
			null,
			Zend_Db::FETCH_ASSOC
		);		
	}
	
	/**
	 * @param array $ids
	 * @return array:
	 */
	public function getByOpcionFamilia( $idOpcionFamilia, $idNegocio = null )
	{
		$select = $this->select();
		
		
		if ( is_int($idOpcionFamilia) ){
			$select->where('idOpcionFamilia = ?', $idOpcionFamilia, Zend_Db::INT_TYPE);
		} else {
			$select->where('idOpcionFamilia IN (?)', $idOpcionFamilia, Zend_Db::INT_TYPE);
		}	
			
	    if ( is_int($idNegocio) ){
			$select->where('idNegocio = ?', $idNegocio, Zend_Db::INT_TYPE);
		}
		
		return $this->_db->fetchAll($select);
	}
	
	public function getAll(){
					
		return 
			$this->_db->fetchAssoc(
				$this->select()					
			);
	}
	
    public function getByParams( $params, $offset = null, $limit = null, $order = null ){
		
		$select = $this->select();
		
		if ( isset($params['idNegocio'])){
			$select->where('idNegocio = ?', $params['idNegocio'], Zend_Db::INT_TYPE);
		}
		
		if ( isset($params['idOpcionFamilia'])){
			
			if ( is_int($params['idOpcionFamilia']) ){
				$select->where('idOpcionFamilia = ?', $params['idOpcionFamilia'], Zend_Db::INT_TYPE);
			} else {
				$select->where('idOpcionFamilia IN (?)', $params['idOpcionFamilia'], Zend_Db::INT_TYPE);
			}
		}
		
		if ( $order ){
			$select->order( $order );
		}
		
		if ( $limit && !is_null($offset) ){
			$select->limit( $limit, $offset );
		}
		
		return $this->_db->fetchAssoc($select);
	}
	
	public function countByParams( $params )
	{
		$select = $this->select()
				->from($this, array('count' => 'COUNT(1)'));
		
		
		if ( isset($params['idNegocio'])){
			$select->where('idNegocio = ?', $params['idNegocio'], Zend_Db::INT_TYPE);
		}
		
		if ( isset($params['idOpcionFamilia'])){
			$select->where('idOpcionFamilia = ?', $params['idOpcionFamilia'], Zend_Db::INT_TYPE);
		}
		
		$result = $this->_db->fetchRow($select);
		
		return $result['count'];
	}
	
    protected function _getData( $opcion )
	{
		return array (
			'idOpcionFamilia'	=> $opcion->idOpcionFamilia,
   			'idNegocio'			=> $opcion->idNegocio,
   			'nombre'	        => $opcion->nombre,
   			'precioAdicional'	=> $opcion->precioAdicional,
		    'activo'	        => $opcion->activo
   		);	
	}
	
	
}